package com.test.javafaq_resource.controller;

import com.test.javafaq_commons.vo.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

@RestController
@Slf4j
@RequestMapping("/v1/images")
public class ImageController {

    @Value("${spring.resources.static-locations}")
    private File resourcePath;

    @Value("${javafaq.resource.host}")
    private String resourceHost;



    @PostMapping
    public R<String> uploadImage(MultipartFile imageFile) throws IOException {
        //服务器每天新建一个文件夹保存当天上传的文件，方便管理
        //文件夹按照 年\月\日
        String path = DateTimeFormatter.ofPattern("yyyy/MM/dd").format(LocalDate.now());
        // path = 2025/4/25
        //创建文件夹
        File folder = new File(resourcePath,path);
        folder.mkdirs();
        log.debug("上传的文件夹为：{}",folder.getAbsolutePath());
        //文件夹已经确定了， 文件名和后缀西药我们设计:文件名随机 ， 后缀不变
        // abc.jpg
        // xxxxsfsfssasfsfa.jgp
        //获取原始文件名
        String filename = imageFile.getOriginalFilename(); //abc.jpg
        //获取扩展名
        String ext = filename.substring(filename.lastIndexOf(".")); //.jpg
        log.debug("文件名：{},后缀名：{}",filename,ext);

        //生成随机文件名 UUID
        String name = UUID.randomUUID().toString() + ext; // xxxxsfsfssasfsfa.jgp
        File file = new File(folder,name); // d:/upload/2025/4/25/xxxxsfsfssasfsfa.jgp
        log.debug("最终文件名:{}",file.getAbsolutePath());
        //写入文件
        imageFile.transferTo(file);
        //返回静态资源服务器访问图片的路径
        String url = resourceHost + "/" + path + "/"+name;
        // d:/upload/a.png      >   localhost:8899/a.png

        return R.ok(url);
    }
}
